package com.econorma.dao;

import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.List;

import org.apache.log4j.Logger;

import com.econorma.data.LetturaProva;
 
 

public class DAO {
	
	private static final Logger logger = Logger.getLogger(DAO.class);
	private static final String TAG = "DAO";
	private static final String F_ID = "ID";
	private static final String F_PROVA_ID ="PROVA_ID";
	private static final String F_VALORE = "VALORE";
	private static final String F_VALORE_GREZZO= "VALORE_GREZZO";
	private static final String F_ID_SONDA = "ID_SONDA";
	private static final String F_DATA = "DATA";
	private static final String F_VALORE_UMIDITA = "VALORE_UMIDITA";
	private static final String F_TIPO_LETTURA = "TIPO_LETTURA";
	private static final String F_DESCRIZIONE = "DESCRIZIONE";
	private static final String F_LATITUDINE = "LATITUDINE";
	private static final String F_LONGITUDINE = "LONGITUDINE";
	private static final String F_GROUP = "GRUPPO";
 
	private DatabaseConnection databaseConnection;

	
	public DAO(DatabaseConnection dc) {
		databaseConnection = dc;
	}

	 

	public List<LetturaProva>  getLettureProve() {
		Connection connection = databaseConnection.getConnection();
		String SQL = "SELECT * FROM LETTURE_PROVA ORDER BY ID_SONDA, DATA DESC";
		ResultSet rs = null;
		try {
			Statement select = connection.createStatement();
			rs = select.executeQuery(SQL);
			
			List<LetturaProva> letture = new ArrayList<LetturaProva>();
			while(rs.next()){
				Long id = rs.getLong(1);
				Long prova_id = rs.getLong(2);
				String id_sonda = rs.getString(3);
				double valore = rs.getDouble(4);
				double valore_grezzo = rs.getDouble(5);
				Date date = new Date(rs.getDate(6).getTime());
				double valore_umidita = rs.getDouble(7);
				
				LetturaProva letturaProva = new LetturaProva();
				letturaProva.setId(id);
				letturaProva.setProva_id(prova_id);
				letturaProva.setValore(valore);
				letturaProva.setValore_grezzo(valore_grezzo);
				letturaProva.setId_sonda(id_sonda);
				letturaProva.setData(date);
				letturaProva.setUmidita(valore_umidita);
			
				letture.add(letturaProva);

			}
			
			rs.close();
			return letture;
		}catch (SQLException e) {
			logger.error(TAG,e);
		}
		return null;
	}

	
	public boolean insert(LetturaProva lettura){
		Connection connection = databaseConnection.getConnection();
		try{
			PreparedStatement st;

			st = connection.prepareStatement("INSERT INTO LETTURE_PROVA  (" +
					F_PROVA_ID +", "+
					F_VALORE +", "+
					F_VALORE_GREZZO +", "+
					F_ID_SONDA +", "+
					F_DATA + ", "  +
					F_VALORE_UMIDITA + "," + 
					F_TIPO_LETTURA + "," + 
					F_LATITUDINE + "," + 
					F_LONGITUDINE + "," + 
					F_GROUP +
					") VALUES (?, ?, ?, ?, ?,?, ?, ?, ?, ?)");


			int idx = 1;
			st.setLong(idx++, lettura.getProva_id());
			st.setDouble(idx++, lettura.getValore());
			st.setDouble(idx++, lettura.getValore_grezzo());
			st.setString(idx++, lettura.getId_sonda());
			st.setDate(idx++, new java.sql.Date(lettura.getData().getTime()));
			st.setDouble(idx++, lettura.getUmidita());
			st.setString(idx++, "T");
 			st.setDouble(idx++, lettura.getLatitude());
			st.setDouble(idx++, lettura.getLongitude());
			st.setInt(idx++, lettura.getGroup());

			boolean execute = st.execute();
			return execute;
		}catch(SQLException e){
			logger.error(TAG,e);
			return false;
		}
	}
	
	public void delete(){
		Connection connection = databaseConnection.getConnection();
		try{
			PreparedStatement st =null;
			String query ="DELETE FROM LETTURE_PROVA";
			st = connection.prepareStatement(query);
			st.executeUpdate();

		}catch (SQLException e) {
			logger.error(TAG,e);
		}

	}
  	
}
